草庐IT

C++ sizeof 包装类

全部标签

c++ - 否定 size_t (即 `-sizeof(struct foo)` ))会发生什么?

我正在处理一些包含表单表达式的代码-(sizeof(structfoo))即size_t的否定,我不清楚C和C++标准对编译器的要求是什么。具体来说,通过查看这里和其他地方,sizeof返回类型为size_t的无符号整数值。在否定无符号整数时,我找不到指定行为的任何明确引用。有没有,如果有,是什么?编辑:好的,所以关于无符号类型的算术有一些很好的答案,但不清楚这实际上是否如此。当这否定时,它是对无符号整数进行操作,还是转换为有符号类型并对其进行处理?从标准中期望的行为是“想象它是相似幅度的负数,然后对无符号值应用'溢出'规则”? 最佳答案

c++ - SWIG 包装库中 __cxa_allocate_exception 期间的段错误

在为Ruby开发一个SWIG封装的C++库时,我们在C++代码内的异常处理过程中遇到了无法解释的崩溃。我不确定重新创建问题的具体情况,但它首先发生在调用std::uncaught_exception期间,然后在一些代码更改后,移至__cxa_allocate_exception在异常构造期间。GDB和valgrind都没有提供任何有关崩溃原因的见解。我找到了几个类似问题的引用资料,包括:http://wiki.fifengine.de/Segfault_in_cxa_allocate_exceptionhttp://forums.fifengine.de/index.php?topic

c++ - 有没有一种方便的方法可以将 std::pair 包装为新类型?

我经常发现自己使用std::pair将两个相关量的逻辑分组定义为函数参数/返回值。一些示例:行/列、标签/值等。很多时候我真的应该滚动我自己的类(class),而不是仅仅使用std::pair。当事情开始崩溃时很容易看出——当代码中到处都是make_pair时,首先,其次,很难记住什么是什么——std::pair比类型Position传达更少的含义.您发现了将std::pair的功能封装在传达真实含义的类型中的最佳方法是什么?以下是我考虑过的一些事情:typedefstd::pairPosition;这至少在传递类型时为类型提供了一个有意义的名称,但类型不是强制的,它实际上仍然只是一对

c++ - 为什么通用 lambda 不能调用自己,但将它包装在一个类中允许它?

这是完整的例子:autocallSelf=[](auto&func){func(func);};classwrapper:publicdecltype(callSelf){usingbase=decltype(callSelf);public:wrapper():base(callSelf){}templatevoidoperator()(T&func){base::operator()(func);}};intmain(){//callSelf(callSelf);//Errorwrapperw;w(w);//OK,niceendlessrecursion}为什么用wrapper可以

c++ - sizeof如何计算结构的大小

我知道由于对齐,char和int在32位架构上被计算为8个字节,但我最近遇到了一种情况,即sizeof运算符将具有3个短裤的结构报告为6个字节。代码如下:#includeusingnamespacestd;structIntAndChar{inta;unsignedcharb;};structThreeShorts{unsignedshorta;unsignedshortb;unsignedshortc;};intmain(){cout编译器:g++(Debian4.3.2-1.1)4.3.2。这真的让我很困惑,为什么包含3个短裤的结构不强制对齐? 最佳答案

c++ - 如何构建捕获所有异常的 C++ Dll 包装器?

正如标题所说,我们正在寻找一种方法来捕获一段C++代码中的所有异常,并将其包装在一个dll中。这样我们就可以屏蔽使用这个dll的应用程序,使其免受这个dll中发生的任何错误。但是,这在Windows下使用C++似乎是不可能的。例子:voidfunction(){try{std::list::iteratorfd_it;fd_it++;}catch(...){}}发生的异常不会被标准C++try/catchblock捕获,也不会被_set_se_translator()设置的任何SEH转换器函数捕获。相反,DLL崩溃,并且使用DLL的程序被中止。我们使用VisualC++2005编译,带

c++ - 从 Rcpp 中的包装方法返回自定义对象

我对Rcpp模块有以下问题:假设我在Rcpp模块中有两个类classA{public:intx;};classBpublic:Aget_an_a(){Aan_a();an_a.x=3;returnan_a;}};RCPP_MODULE(mod){usingnamespaceRcpp;class_("A").constructor().property("x",&A::get_x);class_("B).constructor().method("get_an_A",&get_an_a);}.现在编译失败,因为它不知道如何处理A的返回类型。我想我可以用Rcpp::Xptr做点什么,但是,

c++ - 一个 C++ 迭代器适配器,它包装和隐藏内部迭代器并转换迭代类型

玩弄了这个,我怀疑这是不可能的,但我想我会问专家。我有以下C++代码:classIInterface{virtualvoidSomeMethod()=0;};classObject{IInterface*GetInterface(){...}};classContainer{private:structItem{Object*pObject;[...othermembers...]};std::listm_items;};我想将这些方法添加到Container中:MagicIteratorBegin();MagicIteratorEnd();为了让调用者可以写:Containerc=[

c++ - 用于 OpenGL 对象的 RAII 包装器

我想为OpenGL对象(纹理、帧缓冲区等)编写一个简单的RAII包装器,我注意到所有glGen*和glDelete*函数共享相同的签名,所以我的第一次尝试是这样的:typedefvoid(__stdcall*GLGenFunction)(GLsizei,GLuint*);typedefvoid(__stdcall*GLDelFunction)(GLsizei,constGLuint*);templateclassGLObject{GLuintm_name;public:GLObject(){glGenFunction(1,&m_name);}~GLObject(){glDelFunct

c++ - 为什么引用类型的 sizeof 会给你类型的大小?

根据标准,在[expr.sizeof](5.3.3.2)我们得到:Whenappliedtoareferenceorareferencetype,theresultisthesizeofthereferencedtype.这似乎与未指定引用的事实相一致[dcl.ref](8.3.2.4):Itisunspecifiedwhetherornotareferencerequiresstorage但对我来说,在语言中出现这种不一致似乎很奇怪。不管引用是否需要存储,能够确定引用使用多少大小不是很重要吗?看到这些结果似乎是错误的:sizeof(vector)==24sizeof(vector*)